#include<bits/stdc++.h>
#define ll long long
using namespace std;
template<typename T>void read(T &x){
    x=0;int f=1;char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
    for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^48);
    x*=f;
}
const int maxn=1e5+10,maxnn=1e6+10;
int dis[maxn],st[maxnn],p[maxn];
struct node{
    int d,a,v;
}G[maxn];
int n,m,L,V,T;
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    read(T);
    while(T--){
        int ans=0;
        int cnt=0;
        read(n);read(m);read(L);read(V);
        for(int i=1;i<=n;i++){
            int d,v,a;
            read(d);read(v);read(a);
            G[i].a=a;
            G[i].v=v;
            G[i].d=d;
        }
        for(int i=1;i<=m;i++){
            read(p[i]);
        }
        for(int i=1;i<=n;i++){
            if(G[i].v>V) cnt++;
        }
        if(cnt>0) ans=1;
        printf("%d %d\n",cnt,n-ans);
    }
    return 0;
}






